﻿using System.Collections.Generic;
using MIAP.Entidades;

namespace MIAP.DataAccess.Interfaces
{
    /// <summary>
    /// Contrato del DAO de procesos de UsuarioDao.
    /// </summary>
    public interface IUsuarioDao
    {
        /// <summary>
        /// Obtiene todos los usuarios.
        /// </summary>
        /// <returns>Lista con todos los usuarios.</returns>
        IList<UsuarioInfo> GetSingleUsuarios(UsuarioInfo usuarioInfo);


        /// <summary>
        /// Obtiene las lista de usuarios activos registrados en el sistema
        /// </summary>
        /// <returns>Lista de objetos usuarioInfo</returns>
        IList<UsuarioInfo> GetUsuarios();

        /// <summary>
        /// Obtiene todos los usuarios del active directory que no han sido dados de alta en el sistema.
        /// </summary>
        /// <returns>Lista de los usuarios que aún no han sido dados de alta.</returns>
        IList<UsuarioInfo> GetUsuariosToEnlist();

        /// <summary>
        /// Cambia el estatus del usuario a activo o inactivo.
        /// </summary>
        /// <param name="idUsuario">Es el id del usuario del cual se cambiará el estatus.</param>
        /// <param name="estatusRegistro">True (Activo), False (Inactivo)</param>
        void ChangeEstatusUsuario(int idUsuario, bool estatusRegistro);

        /// <summary>
        /// Obtiene la información de un determinado usuario.
        /// </summary>
        /// <param name="idUsuario">Es el id del usuario del que se desea obtener la informacion.</param>
        /// <returns>Información general del usuario.</returns>
        UsuarioInfo GetUsuarioById(int idUsuario);

        /// <summary>
        /// Obtiene el usuario del active directory dado un Id especifico
        /// </summary>
        /// <param name="idClave">Id del usuario en la tabla del AD a obtener</param>
        /// <returns></returns>
        UsuarioInfo GetUsuarioADByClave(int idClave);

        /// <summary>
        /// Obtiene todos los permisos ligados a los perfiles correspondientes a un usuario.
        /// </summary>
        /// <param name="idPerfil">Lista que contiene los roles del usuario.</param>
        /// <returns>Lista de permisos ligados a un perfil.</returns>
        IList<PermisoInfo> GetPerfilPermisosByIdPerfil(int idPerfil);

        /// <summary>
        /// Obtiene los usuarios que autorizan la recarga del archivo.
        /// </summary>
        /// <param name="idArchivo">Id del archivo del quien buscaremos los usuarios que autorizan.</param>
        /// <returns>Lista de usuarios que autorizan la recarga de arhivos</returns>
        IList<UsuarioInfo> GetUsuariosAutorizan(int idArchivo);


        /// <summary>
        /// Obtiene los usuarios que cargan la recarga del archivo.
        /// </summary>
        /// <param name="idArchivo">Id del archivo del quien buscaremos los usuarios que autorizan</param>
        /// <returns>Lista de usuarios que autorizan la recarga de archivos</returns>
        IList<UsuarioInfo> GetUsuariosCargan(int idArchivo);

        /// <summary>
        /// Agrega un nuevo usuario a la tabla de usuarios sin perfiles.
        /// </summary>
        /// <param name="usuario">Usuario que será agregado.</param>
        /// <param name="user">Usuario que ejecuta la operación.</param>
        void AddNewSingleUsuario(UsuarioInfo usuario, string user);

        /// <summary>
        /// Modifica la información del usuario.
        /// </summary>
        /// <param name="usuario">Información del usuario que será modificado.</param>
        /// <param name="user">Usuario que ejecuta la operación.</param>
        void EditUsuario(UsuarioInfo usuario, string user);

        /// <summary>
        /// Comprueba si el usuario especificado existe en la aplicación.
        /// </summary>
        /// <param name="nombreUsuario">Nombre de usuario de la credencial.</param>
        /// <returns>True si la credencial de usuario existe.</returns>
        bool ExisteUsuario(string nombreUsuario);
    }
}
